#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
第一行注释是为了告诉Linux/OS X系统，这是一个Python可执行程序，Windows系统会忽略这个注释；
第二行注释是为了告诉Python解释器，按照UTF-8编码读取源代码，否则，你在源代码中写的中文输出可能会有乱码。
'''

'''切片'''

L=['A','B','C','D','E','F','G']

#获取前三个 0,1,2
print L[:3]

#不包括3，获取下标1,2
print L[1:3]

#不包括-1，获取下标-2
print L[-2:-1]

#获取倒数2个
print L[-2:]

#每两个取一个
print L[0:6:2]

#倒序
print [1,2,3,4,5,6,7][::-1]

#切片字符串
print 'ABCDEFG'[0:3]

'''迭代'''

for i in range(10):
	print 'i=',i
	
#dict
dic={'name':'tangzhijie','age':25,'city':'shenzhen'}
#迭代key，
for key in dic.iterkeys():  #或者直接 in dic
	print key
#迭代value
for value in dic.itervalues():
	print str(value)
#迭代key和value
for k,v in dic.iteritems():
	print k+'='+str(v)

#迭代list的下标和值
for i,value in enumerate(['a','b','c']):
	print u'下标'+str(i)+'='+value

'''列表生成式 ''' 

T=[x*x for x in range(10)]
print T

T=[x*x for x in range(10) if x%2==0]
print T

T=[m+n for m in 'ABC' for n in 'DEF']
print T

map={'A':'a','B':'b','C':'c'}
T=[k+'='+v for k,v in map.iteritems()]
print T

#lower()为大写转小写
T=[s.lower() for s in ["Hello","World"]]
print T

T=[s.lower() for s in [18,'H','E','L'] if isinstance(s,str)]
print T

T=[s+1 for s in [1,2,3,4,5,'a'] if isinstance(s,int)]
print T

'''生成器Generator'''
g=(x*x for x in range(10));
print g
print 'g.next()=',g.next()
print 'g.next()=',g.next()
#使用for循环打印生成器内的数据，如果之前调用过next，会从之后开始遍历
for item in g:
	print 'item=',item
	
#斐波那契数列
def fib(max):
	n,a,b=0,0,1
	while n<max:
		print b
		a,b=b,a+b
		n+=1

fib(7)

#把fib函数变成generator,变成generator的函数，在每次调用next()的时候执行，遇到yield语句返回，再次执行时从上次返回的yield语句处继续执行
def fib(max):
	n,a,b=0,0,1
	while n<max:
		yield b
		a,b=b,a+b
		n+=1

for x in fib(7):
	print x
	
#在执行过程中，遇到yield就中断，下次又继续执行
def test():
	print 'step1'
	yield 1
	print 'step2'
	yield 2
	print 'step3'
	yield 3

t=test()
t.next()
t.next()
t.next()

#sum是内建的求和函数
print sum(range(1,101))